package org.quincy.rock.core.dao;

import org.quincy.rock.core.util.StringUtil;

/**
 * <b>name拦截器。</b>
 * <p><b>详细说明：</b></p>
 * <!-- 在此添加详细说明 -->
 * 无。
 * @version 1.0
 * @author wks
 * @since 1.0
 */
public interface NameInterceptor {
	/**
	 * 无操作。
	 */
	public final static NameInterceptor NOOP = (alias, name, isObj, isCol) -> StringUtil.isBlank(alias) ? name
			: new StringBuilder(alias).append(StringUtil.CHAR_DOT).append(name);

	default CharSequence applyTableName(String tableName) {
		return apply(null, tableName, false, false);
	}

	default CharSequence applyEntityName(String entityName) {
		return apply(null, entityName, true, false);
	}

	default CharSequence applyColumnName(String columnName) {
		return apply(null, columnName, false, true);
	}

	default CharSequence applyColumnName(String alias, String columnName) {
		return apply(alias, columnName, false, true);
	}

	default CharSequence applyPropertyName(String propertyName) {
		return apply(null, propertyName, true, true);
	}

	default CharSequence applyPropertyName(String alias, String propertyName) {
		return apply(alias, propertyName, true, true);
	}

	/**
	 * 拦截name
	 * @param alias 别名,如果name是列名，则alias可以传入表别名,否则传入null
	 * @param name 对象名或db名
	 * @param isObj 对象名或db名
	 * @param isCol 列名还是表名
	 * @return 修正后的name
	 */
	public CharSequence apply(String alias, String name, Boolean isObj, Boolean isCol);

}
